package com.lancoo.cvas.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lancoo.cvas.entity.*;
import com.lancoo.cvas.pojo.vo.CourseRange;
import com.lancoo.cvas.pojo.vo.CssRangeDTO;
import com.lancoo.cvas.pojo.vo.CssTaskRoundInfo;
import com.lancoo.cvas.pojo.vo.GetCssTask;

import java.util.List;

/**
 * 选课计划
 *
 * @author liufeng
 * @email 1037383243@qq.com
 * @date 2023-12-04 11:54:01
 */
public interface CssTaskInfoService extends IService<CssTaskInfo> {


    /**
     * 根据排课计划 初始化选课计划
     *
     * @param taskInfo
     */
    void addCssTask(TaskInfo taskInfo);


    /**
     * 删除选课数据
     * @param taskIds
     */
    void removeCssInfo(List<Integer> taskIds);

    /**
     * 获取选课任务
     * @param taskId
     * @return
     */
    CssTaskInfo getCssTaskInfo(Integer taskId);

    /**
     *获取最早轮次开始时间 小于当前时间则返回false
     * @param cssTaskId
     * @return
     */
    Boolean getEarliestRound(Integer cssTaskId);

    /**
     *批量删除轮次
     * @param cssTaskId
     * @param selectRound
     * @return
     */
    Boolean removeUselessRound(Integer cssTaskId, List<Integer> selectRound);

    /**
     * 更新选课任务  轮次-最低开班人数
     * @param cssTaskInfo
     * @return
     */
    CssTaskInfo updateCssTaskInfo(CssTaskInfo cssTaskInfo);

    /**
     * 根据选课id 和轮次获取所有选课轮次
     * @param cssTaskId
     * @param selectRound
     * @return
     */
    List<CssTaskRound> getCssTaskRound(Integer cssTaskId, Integer selectRound);

    /**
     *更新或添加选课轮次
     * @param cssTaskRound
     * @return
     */
    CssTaskRound addOrUpdateCssTaskRound(CssTaskRound cssTaskRound);

    /**
     * 获取范围
     * @param cssTaskId
     * @param flag
     * @return
     */
    List<CssRangeDTO> getRange(Integer taskId,Long cssTaskId, Integer flag);

    /**
     * 删除选课轮次
     * @param roundId
     * @return
     */
    Boolean removeCssTaskRound(Integer roundId);

    /**
     * 获取选课任务
     * @param getCssTask
     * @return
     */
    List<CssTaskRoundInfo> getCssTaskBySchool(GetCssTask getCssTask);

    /**
     * 设置选课范围
     * @param cssRanges
     * @param roundId
     * @return
     */
    List<CssRange> setRange(List<CssRange> cssRanges, Integer roundId);

    /**
     * 获取所有选课列表
     * @param taskId
     * @param roundId
     * @return
     */
    List<Course> getCourseList(Integer taskId);

    /**
     * 通过课程id获取课程类别
     * @param taskId
     * @param gradeIds
     * @return
     */
    CourseRange getCourseRange(Integer taskId, List<String> gradeIds);

    CssTaskRound addOrUpdateCssTaskRoundWX(CssTaskRound cssTaskRound);
}

